package p.ithorns.integration.hazelcast.mqtt;

import p.ithorns.framework.common.utils.StringUtil;

/**
 * Encryption
 * 数据加解密工具
 *
 * @author Ht.L
 * @date 2023/6/8 9:07
 * @since 1.0.0
 */
public interface Encryption {


    /**
     * 加解密的key
     */
    char ENCRYPT_KEY = 0xCD;

    /**
     * 加解密
     *
     * key = b
     * 加密 a ^ b = c
     * 解密 c ^ b = a
     *
     * @param src -源
     * @return String
     */
    static String encrypt(String src) {
        char[] chars = src.toCharArray();
        char[] c2 = new char[chars.length];
        for (int i = 0; i < chars.length; i++) {
            c2[i] = (char) (chars[i] ^ ENCRYPT_KEY);
        }
        return new String(c2);
    }

    /**
     * 16进制加密
     * <p>
     * 将16进制数据每个字节(每2个字符为一个字节)转10进制整数，
     * 然后使用指定Key异或后生成一个新的字符串
     *
     * @param hex -源(16进制形式)
     * @return String
     */
    static String hexEncrypt(String hex) {
        if (StringUtil.isBlank(hex)) {
            return StringUtil.EMPTY;
        }
        StringBuilder output = new StringBuilder();
        for (int i = 0; i < hex.length(); i += 2) {
            String str = hex.substring(i, i + 2);
            int decimal = Integer.parseInt(str, 16) ^ ENCRYPT_KEY;
            output.append(String.format("%02x", decimal));
        }
        return output.toString();
    }

}